<?php

class IntroController extends Controller
{

  public $layout = 'column2';

  /**
   * @var CActiveRecord the currently loaded data model instance.
   */
  private $_model;

  /**
   * @return array action filters
   */
  public function filters()
  {
    return array(
        'accessControl', // perform access control for CRUD operations
    );
  }

  /**
   * Specifies the access control rules.
   * This method is used by the 'accessControl' filter.
   * @return array access control rules
   */
  public function accessRules()
  {
    return array(
        array('allow', // allow all users to access 'index' and 'view' actions.
            'actions' => array('index', 'view', 'list', 'match', 'addmatch', 'rank','rankAjax', 'chart'),
            'users' => array('*'),
        ),
        array('allow', // allow authenticated users to access all actions
            'users' => array('@'),
        ),
        array('deny', // deny all users
            'users' => array('*'),
        ),
    );
  }

  /**
   * Lists all models.
   */
  public function actionIndex()
  {
    $members = Members::model()->findAll();

    $this->render('index', array(
        "members" => $members
    ));
  }

  /**
   * Lists all models.
   */
  public function actionList()
  {
    $members = Members::model()->findAll();

    $this->render('list_member', array(
        "members" => $members
    ));
  }

  /**
   * Lists all models.
   */
  public function actionRank()
  {
    $rank = Members::model()->getRank();

    $this->render('rank', array(
        "members" => $members,
        'rank' => $rank
    ));
  }
  /**
   * Lists all models.
   */
  public function actionDel()
  {
    $matchs = Matchs::model()->deleteAll('match_id = ' . Yii::app()->request->getQuery('matchId', NULL));

    $this->redirect(array('match'));
  }

  /**
   * Lists all models.
   */
  public function actionChart()
  {
    $this->layout = '//layouts/ajax';
    $count = 10;
    $criteria = new CDbCriteria();
    $criteria->group = 'match_date';
//    $criteria->limit = 10;

    $listDate = Matchs::model()->findAll($criteria);
    foreach ($listDate as $key => $value) {
      $listDateArray[$key] = $value->match_date;
    }
    $listDateArray =array_slice($listDateArray, $count * (-1), $count, true);
//var_dump($listDateArray);die;
    $members = Members::model()->findAll();
//    var_dump(Matchs::model()->getRankByMemberId(1));die;
    $arrayJson = array();
    foreach ($members as $value) {

      $strRank = '';
      $rankByMember = Matchs::model()->getRankByMemberId($value->member_id);
      $rankByMember =array_slice($rankByMember, $count * (-1), $count, true);
      foreach ($rankByMember as $val) {
        $strRank .= $val['rank'] . ',';
      }
      $strRank = ltrim($strRank, ',');
      $arrayJson[] = "{name: '". $value->member_name ."', data: [" . $strRank . "]}";
    }
    $strRanks = implode(',', $arrayJson);
//    {name: 'Tokyo', data: [7.0, 6.9, 9.5, 14.5, 18.2, 21.5, 25.2, 26.5, 23.3, 18.3, 13.9, 50]}

    $this->render('chart', array(
        "strRanks" => $strRanks,
        "listDateArray" => $listDateArray,

    ));
  }

  /**
   * Lists all models.
   */
  public function actionMatch()
  {
    $matchs = Matchs::model()->findAll(array('order' => 'match_date desc'));
    $members = Members::model()->findAll();

    $arrayMember = array();
    foreach ($members as $member) {
      $arrayMember[$member->member_id] = $member->member_name;
    }

    $dates = array();
    foreach ($matchs as $match) {
      $dates[$match->match_date][$match->match_id]['member_name_win_1'] = $arrayMember[$match->match_player_win_1];
      $dates[$match->match_date][$match->match_id]['member_name_win_2'] = $arrayMember[$match->match_player_win_2];
      $dates[$match->match_date][$match->match_id]['member_name_lost_1'] = $arrayMember[$match->match_player_lost_1];
      $dates[$match->match_date][$match->match_id]['member_name_lost_2'] = $arrayMember[$match->match_player_lost_2];
      $dates[$match->match_date][$match->match_id]['match_point_win'] = $match->match_point_win;
      $dates[$match->match_date][$match->match_id]['match_point_lost'] = $match->match_point_lost;
      $dates[$match->match_date][$match->match_id]['match_price'] = $match->match_price;

      //tinh tien cho tung member
      $money[$match->match_date][$match->match_player_win_1] += 0;
      $money[$match->match_date][$match->match_player_lost_1] += $match->match_price;
      $lost[$match->match_date][$match->match_player_lost_1]++;
      $lost[$match->match_date][$match->match_player_win_1] += 0;
      $win[$match->match_date][$match->match_player_win_1]++;
      $win[$match->match_date][$match->match_player_lost_1] += 0;
      $money[$match->match_date][$match->match_player_win_2] += 0;
      $money[$match->match_date][$match->match_player_lost_2] += $match->match_price;
      $lost[$match->match_date][$match->match_player_lost_2]++;
      $lost[$match->match_date][$match->match_player_win_2] += 0;
      $win[$match->match_date][$match->match_player_win_2]++;
      $win[$match->match_date][$match->match_player_lost_2] += 0;
    }
//    var_dump($money);die;

    $this->render('match', array(
        "dates" => $dates,
        "money" => $money,
        "win" => $win,
        "lost" => $lost,
        'members' => $arrayMember
    ));
  }

  /**
   * Displays a particular model.
   */
  public function actionAddMatch()
  {
    //=====================SUBMIT

    $lostMember = Yii::app()->request->getPost('lostMember', NULL);
    $winMember = Yii::app()->request->getPost('winMember', NULL);
    $price = Yii::app()->request->getPost('price', NULL);
    $score = Yii::app()->request->getPost('score', NULL);
    $today = date('Y-m-d');

    $error = '';

    //submit
    if ($price) {

      //validate
      if (($lostMember[0] == 0 && $lostMember[1] == 0) || ($winMember[0] == 0 && $winMember[1] == 0)) {
        //thieu member
        $error .= '<br>2 bên thiếu member';
      }

      //check duplicate
      $allMember = $lostMember + $winMember;
      if ($lostMember[0] != 0 && $lostMember[0] == $lostMember[1]) {
        $error .= '<br>Member duplicate';
      }
      if ($lostMember[0] != 0 && $lostMember[0] == $winMember[0]) {
        $error .= '<br>Member duplicate';
      }
      if ($lostMember[0] != 0 && $lostMember[0] == $winMember[1]) {
        $error .= '<br>Member duplicate';
      }
      if ($lostMember[1] != 0 && $lostMember[1] == $winMember[0]) {
        $error .= '<br>Member duplicate';
      }
      if ($lostMember[1] != 0 && $lostMember[1] == $winMember[1]) {
        $error .= '<br>Member duplicate';
      }
      if ($winMember[0] != 0 && $lostMember[0] == $winMember[1]) {
        $error .= '<br>Member duplicate';
      }


      //2 ben khong can so luong
      $totalMemLost = 0;
      $totalMemWin = 0;
      if ($lostMember[0] != 0)
        $totalMemLost++;
      if ($lostMember[1] != 0)
        $totalMemLost++;
      if ($winMember[0] != 0)
        $totalMemWin++;
      if ($winMember[1] != 0)
        $totalMemWin++;

      if ($totalMemLost != $totalMemWin) {
        //2 ben khong can so luong
        $error .= '<br>Số lượng 2 bên không đều nhau';
      }

//      if (is_numeric($score[0]) || is_numeric($score[1])) {
//        $error .= '<br>tỷ số phải là số Nguyên dương';
//      }
//      var_dump($score);die;
      //insert du lieu
      if (strlen($error) == 0) {
        $match = new Matchs();
        $match->match_player_win_1 = $winMember[0] == 0 ? Null : $winMember[0];
        $match->match_player_win_2 = $winMember[1] == 0 ? Null : $winMember[1];
        $match->match_player_lost_1 = $lostMember[0] == 0 ? Null : $lostMember[0];
        $match->match_player_lost_2 = $lostMember[1] == 0 ? Null : $lostMember[1];
        $match->match_date = $today;
        $match->match_point_lost = $score[0];
        $match->match_point_win = $score[1];
        $match->match_price = $price / $totalMemWin;
        $match->save();
//        $url = Yii::app()->createUrl('projects/view')."&id=$model->projectID#uniqe_$id";

        $this->redirect(Yii::app()->createUrl('intro/match'));
      }
//    var_dump($error);die;
    }
    //=====================SUBMIT
    $members = Members::model()->findAll();

    $arrayMember = array();
    foreach ($members as $member) {
      $arrayMember[$member->member_id] = $member->member_name;
    }
    $this->render('add_match', array(
        "members" => $arrayMember,
        "error" => $error
    ));
  }

  /**
   * Displays a particular model.
   */
  public function actionView()
  {
    $post = $this->loadModel();
    $comment = $this->newComment($post);

    $this->render('view', array(
        'model' => $post,
        'comment' => $comment,
    ));
  }

  /**
   * Creates a new model.
   * If creation is successful, the browser will be redirected to the 'view' page.
   */
  public function actionCreate()
  {
    $model = new Post;
    if (isset($_POST['Post'])) {
      $model->attributes = $_POST['Post'];
      if ($model->save())
        $this->redirect(array('view', 'id' => $model->id));
    }

    $this->render('create', array(
        'model' => $model,
    ));
  }

  /**
   * Updates a particular model.
   * If update is successful, the browser will be redirected to the 'view' page.
   */
  public function actionUpdate()
  {
    $model = $this->loadModel();
    if (isset($_POST['Post'])) {
      $model->attributes = $_POST['Post'];
      if ($model->save())
        $this->redirect(array('view', 'id' => $model->id));
    }

    $this->render('update', array(
        'model' => $model,
    ));
  }

  /**
   * Deletes a particular model.
   * If deletion is successful, the browser will be redirected to the 'index' page.
   */
  public function actionDelete()
  {
    if (Yii::app()->request->isPostRequest) {
      // we only allow deletion via POST request
      $this->loadModel()->delete();

      // if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
      if (!isset($_GET['ajax']))
        $this->redirect(array('index'));
    }
    else
      throw new CHttpException(400, 'Invalid request. Please do not repeat this request again.');
  }

  /**
   * Manages all models.
   */
  public function actionAdmin()
  {
    $model = new Post('search');
    if (isset($_GET['Post']))
      $model->attributes = $_GET['Post'];
    $this->render('admin', array(
        'model' => $model,
    ));
  }

  /**
   * Suggests tags based on the current user input.
   * This is called via AJAX when the user is entering the tags input.
   */
  public function actionSuggestTags()
  {
    if (isset($_GET['q']) && ($keyword = trim($_GET['q'])) !== '') {
      $tags = Tag::model()->suggestTags($keyword);
      if ($tags !== array())
        echo implode("\n", $tags);
    }
  }

  /**
   * Returns the data model based on the primary key given in the GET variable.
   * If the data model is not found, an HTTP exception will be raised.
   */
  public function loadModel()
  {
    if ($this->_model === null) {
      if (isset($_GET['id'])) {
        if (Yii::app()->user->isGuest)
          $condition = 'status=' . Post::STATUS_PUBLISHED . ' OR status=' . Post::STATUS_ARCHIVED;
        else
          $condition = '';
        $this->_model = Post::model()->findByPk($_GET['id'], $condition);
      }
      if ($this->_model === null)
        throw new CHttpException(404, 'The requested page does not exist.');
    }
    return $this->_model;
  }

  /**
   * Creates a new comment.
   * This method attempts to create a new comment based on the user input.
   * If the comment is successfully created, the browser will be redirected
   * to show the created comment.
   * @param Post the post that the new comment belongs to
   * @return Comment the comment instance
   */
  protected function newComment($post)
  {
    $comment = new Comment;
    if (isset($_POST['ajax']) && $_POST['ajax'] === 'comment-form') {
      echo CActiveForm::validate($comment);
      Yii::app()->end();
    }
    if (isset($_POST['Comment'])) {
      $comment->attributes = $_POST['Comment'];
      if ($post->addComment($comment)) {
        if ($comment->status == Comment::STATUS_PENDING)
          Yii::app()->user->setFlash('commentSubmitted', 'Thank you for your comment. Your comment will be posted once it is approved.');
        $this->refresh();
      }
    }
    return $comment;
  }

}
